package com.woniu.staff.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;

import java.security.Key;
import java.util.Date;
import java.util.Map;

public class JWTUtil {
    //HS256 即字节大于等于256
    //hs256 加密密钥
    private static String sect="asdfsdfgdfghfghjghadfhansadjkhjklqwerqwie";
    /**
     *生成JWT令牌
     * @return
     */
    public static String createToken(Map<String,Object> body,Integer minute ){
        Key key = Keys.hmacShaKeyFor(sect.getBytes());
        return Jwts.builder()
                .setClaims(body)
                .setExpiration(new Date(System.currentTimeMillis() + minute * 60 * 1000))
                .signWith(key)
                .compact();
    }
    /**
     * 校验解析JWT
     * 校验JWT的合法性
     * 格式/签名/有效期
     * 任何一个校验失败会抛出相应的异常
     * MalformedJwtException    格式错误异常
     * SignatureException       签名异常
     * ExpiredJwtException      JWT过期异常
     */
    public static Claims parseToken(String token){
        Key key = Keys.hmacShaKeyFor(sect.getBytes());
        return Jwts.parserBuilder().setSigningKey(key)
                .build().parseClaimsJws(token).getBody();
    }

    /**
     * 获取JWT中荷载的数据
     * @param key
     * @return
     */
    public static Object getData(String token, String key){
        Claims claims=parseToken(token);
        return claims.get(key);
    }
}
